odump_encode:
	subu sp,sp,12 #defino mi frame para una función non-leaf
	sw	ra,8(sp)
	sw	$fp,4(sp)
	sw	gp,(sp)
	move $fp,sp


	sw a0,8($fp)		#escribo los argumentos en el stack
	sw a1,12($fp)
	sw a2,16($fp)


	move t0,a0			#almaceno los argumentos en las variables
	move t1,a1
	lw t2,(a2) #Cargo el primer word apuntado por el 3er parámetro, osea lenght


	sw t0,20($fp)		#guardo las variables locales
	sw t1,24($fp)
	sw t2,28($fp)

	move t6,zero #contador de caracteres

fgetchar:
	lw   a0, 8($fp)
	la   T9, fgetc
	jal T9
	move t3, v0

mientras:
	lw   a0, 8($fp)
	la   T9, feof
	jal T9
	move t4, v0
	bneq t0, NULL, fin_mientras   #si feof(f) no es null termina el while

	srl t5,t3,6 #me quedo con los dos ultimos bits
	addi a0,t5,48 #le sumo el ascii del 0
	j fputchar

	beq t6,t2,salto #si la cantidad de caracteres es igual a lenght entonces inserto salto de línea

	sll t5,t3,2
	srl t5,t5,5 #me quedo con los 3 bits del medio
	addi a0,t5,48 #le sumo el ascii del 0
	j fputchar

	beq t6,t2,salto #si la cantidad de caracteres es igual a lenght entonces inserto salto de línea

	sll t5,t3,5
	srl t5,t5,5 #me quedo con los primeros 3 bits
	addi a0,t5,48 #le sumo el ascii del 0
	j fputchar
	beq t6,t2,salto #si la cantidad de caracteres es igual a lenght entonces inserto salto de línea
	j mientras


done:
	move sp,$fp
	lw ra,8(sp)
	lw   $fp,4(sp)
	addu sp,sp, 12
	j    ra

fin_mientras:
	move v0,zero #la salida es correcta, devuelve 0
	j done

fputchar:
	lw   a1,12($fp)
	la   T9, fputc
	jal T9
	addi t6,t6,1
	j ra
salto:

	move a0,zero
	addi a0,a0,'\n'
	move t6,zero
	j putchar
	j ra


	.end odump_encode
